<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>表白墙</title>
    <style>
        /* 通配符选择器, 选中页面所有元素 */
        *{
            /* 消除浏览器的默认样式 */
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        .container {
            width: 600px;
            margin: 20px auto;
        }

        h1 {
            text-align: center;
        }

        p {
            text-align: center;
            color: #666;
            margin: 20px 0;
        }

        .row {
            /* 开启弹性布局 */
            display: flex;
            height: 40px;
            /* 水平方向剧中 */
            justify-content: center;
            /* 垂直方向居中 */
            align-items: center;
        }

        .row span {
            width: 80px;
        }

        .row input {
            width: 200px;
            height: 30px;
        }

        .row button {
            width: 280px;
            height: 30px;
            color: white;
            background-color: orange;
            /* 去掉边框 */
            border: none;
            border-radius: 5px;
        }

        /* 点击有个反馈 */
        .row button:active{
            background-color: grey;
        }
    </style>

    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
    <div class="container">
        <h1>表白墙</h1>
        <p>输入内容后点击提交, 信息会显示到下方表格中</p>
        <div class="row">
            <span>谁: </span>
            <input type="text">
        </div>
        <div class="row">
            <span>对谁: </span>
            <input type="text">
        </div>
        <div class="row">
            <span>说: </span>
            <input type="text">
        </div>
        <div class="row">
            <button id="submit">提交</button>
        </div>
    </div>

    <script>
        // 是先提交操作, 点击提交按钮, 就能把用户输入的内容提交到页面上显示出来
        // 点击的时候, 获取到三个输入框中的文本内容
        // 创建一个新的 div.row 把内容构造到这个div中即可
        
        let containerDiv = document.querySelector('.container');
        let inputs = document.querySelectorAll('input');
        let button = document.querySelector('#submit');
        button.onclick = function(){
            //1. 获取三个输入框的内容
            let from = inputs[0].value;
            let to = inputs[1].value;
            let msg = inputs[2].value;
            if(from == '' || to == '' || msg == ''){
                return;
            }

            //2. 构造新div
            let rowDiv = document.createElement('div');
            rowDiv.className = 'row message';
            rowDiv.innerHTML = from + ' 对 ' + to + ' 说: ' + msg;
            containerDiv.appendChild(rowDiv);

            //3. 清空之前的输入框内容
            for(let input of inputs)
            {
                input.value = '';
            }

            //4. 把用户填写的内容, 发送给服务器, 让服务器来保存
            let requestBody = {
                "from" : from,
                "to" : to,
                "message" : msg
            };

            let jsonString = JSON.stringify(requestBody);
            $.ajax({
                type: 'post',
                url: 'message',
                contentType: 'application/json; charset=utf8',
                data: jsonString,
                success: function(reseponseBody){
                    //向控制台打印
                    console.log("responseBody: " + reseponseBody);
                }
            });
        }

        //直接在script里写的js代码, 就是页面加载时被执行到的
        // 发起一个get请求, 从服务器获取到数据
        // get 请求不需要body, 也就不需要上述data和contentType属性了
        $.ajax({
            type: 'get',
            url: 'message',
            success: function(body){
                //由于响应中已经有Content-Type: application/json 了就不需要使用parse
                //body = JSON.parse(body);

                //拿到container这个元素
                let containerDiv = document.querySelector('.container');
                //处理服务器返回相应的数据
                for(let i = 0; i < body.length; i++)
                {
                    //body是一个数组, 此时message也就是js对象
                    //这个message对象里, 有三个属性, from, to, message
                    let message = body[i];

                    //根据message对象构建html片段, 把片段给显示到网页上
                    //createElement 方法就能构造出一个html标签
                    //此时就得到了<div></div>
                    let div = document.createElement('div');
                    
                    //还需要往里面设置一个属性, class="row"设置这个属性是为了让css给这个属性设置一些样式
                    div.className = 'row';
                    div.innerHTML = message.from + "对" + message.to + "说: " + message.message;
                    containerDiv.appendChild(div);
                }
            }
        });
    </script>
</body>
</html>